<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<!-- 迭代： 循环遍历 -->

<body>
    <script>

        var arr = ['a', 'b', 'c', 'd', 'e']

        for (let item of arr) {
            console.log(item)
        }
        console.log(arr)
        // 可迭代对象 原型中必须有 Symbol(Symbol.iterator) 是一个方法 ,该方法
        // Array和Map拥有默认的迭代行为，而Object则没有
        var obj = { left: 200, rigth: 300 }
        // for(let item of obj){
        //     console.log(item) // obj is not iterable  obj不是一个可迭代的
        // }

        // 生成 Symbol(Symbol.iterator) 返回一个对象 对象需要一个next方法，返回一个value（返回的值）和done（是否完成，true则跳出循环）
        obj[Symbol.iterator] = function () {
            let keys = Object.keys(obj)
            let len = keys.length
            let n = -1
            return {
                next() {
                    n++
                    if (n < len) {
                        return {
                            value: obj[keys[n]],
                            done: false
                        }
                    } else {
                        return {
                            done: true
                        }
                    }

                }
            }
        }
        // 完成上面操作这样就是一个可迭代对象了  
        for (let item of obj) {
            console.log(item) // obj is not iterable  obj不是一个可迭代的
        }

    </script>
</body>

</html>